#ifndef _TETRIS_H_
#define _TETRIS_H_

/* Constantes. */
#define HAUTEUR 20
#define LARGEUR 15
#define NB_PIECES 5
#define HAUTEUR_MAX_DES_PIECES 4

/* Type */

struct SPiece {
    int hauteur;
    int largeur;
    char * forme[HAUTEUR_MAX_DES_PIECES];
};
typedef struct SPiece Piece;


/* Tableau de pièces */
typedef Piece tabPieces[NB_PIECES];

/* Tableau de jeu bidimensionnel */
typedef char Grille[HAUTEUR][LARGEUR];

typedef struct {
   Grille g;
   Piece tab[ NB_PIECES ];
   Piece piece; /* la piece "en cours" que l'on cherche à placer. */
   int col; /* la colonne actuelle pour la pièce que l'on cherche à caser. */
   int score; /* le score */
   int delay; /* le delay */
 } Jeu;


/* Fonctions. */
extern void genererPieces(tabPieces lesPieces);
extern void initialiseGrille(Grille tabGrille);
extern char lireCase(Grille tabGrille, int ligne, int col);
extern void afficheGrille(Grille tabGrille);
extern void afficherPiece(Piece p);
extern void ecrireCase(Grille tabGrille, int ligne, int col, char car);
extern int hauteurMax(Grille tabGrille, int debut_col, int fin_col);
extern void ecrirePiece(Grille tabGrille, Piece p, int col, int hauteur);
extern Piece pieceAleatoire(tabPieces lesPieces);
extern int partiePerdu(Piece p, int hauteur);
extern void supprimerLigne(Grille tabGrille, int ligne);
extern void nettoyer(Grille tabGrille);
extern void rempliTabLargeur(int tabLargeur[]);
extern int verifEntree(int tabLargeur[], int entree, Piece p);


#endif /* ifndef _TETRIS_H_ */
